From: Florian Müllner Date: Thu, 23 Jan 2020 16:15:08 +0000 (+0100) Subject: app: Use better icon for wayland window-backed apps X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~781^2^2~134 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d9b3d6745ce48288ee51b1503bcb2d659b9f810a;p=gnome-shell.git app: Use better icon for wayland window-backed apps For window-backed apps (read: windows we can't match to a .desktop file), we use the window's icon property as icon. However there is no such property on wayland (at least in the protocols we support), so we end up with a blank actor in that case. Do better than that, and pick a generic fallback icon instead. https://gitlab.gnome.org/GNOME/gnome-shell/issues/1779 --- diff --git a/src/shell-app.c b/src/shell-app.c index 5704f75b1..0d314bbb3 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -186,7 +186,7 @@ window_backed_app_get_icon (ShellApp *app, { MetaWindow *window = NULL; StWidget *widget; - gint scale; + int scale, scaled_size; ShellGlobal *global; StThemeContext *context; @@ -194,7 +194,7 @@ window_backed_app_get_icon (ShellApp *app, context = st_theme_context_get_for_stage (shell_global_get_stage (global)); g_object_get (context, "scale-factor", &scale, NULL); - size *= scale; + scaled_size = size * scale; /* During a state transition from running to not-running for * window-backend apps, it's possible we get a request for the icon. @@ -208,14 +208,28 @@ window_backed_app_get_icon (ShellApp *app, ClutterActor *actor; actor = clutter_actor_new (); - g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL); + g_object_set (actor, + "opacity", 0, + "width", (float) scaled_size, + "height", (float) scaled_size, + NULL); return actor; } - widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), - G_OBJECT (window), - "icon", - size); + if (meta_window_get_client_type (window) == META_WINDOW_CLIENT_TYPE_X11) + { + widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), + G_OBJECT (window), + "icon", + scaled_size); + } + else + { + widget = g_object_new (ST_TYPE_ICON, + "icon-size", size, + "icon-name", "application-x-executable", + NULL); + } st_widget_add_style_class_name (widget, "fallback-app-icon"); return CLUTTER_ACTOR (widget);